
#ifndef ANYTHING_SRC_USN_H_
#define ANYTHING_SRC_USN_H_

#include <string>
#include <vector>
#include <map>
#include "type_define.h"

namespace anything
{
    namespace usn
    {
        class UsnUtility
        {
        public:
            UsnUtility();
            ~UsnUtility();
            enum {
                drive_size = 26*4,
                enum_usn_data_size = sizeof(unsigned __int64) + 0x10000,
            };
            void init_usn_information();
            struct FileInfo
            {
                void clear();
                uint64 file_ref_no;
                uint64 parent_ref_no;
                uint32 file_attributes;
                std::wstring name;
            };
        private:
            void _construct_drive_infonation( const wchar_t* drive,std::map<uint64,FileInfo>* files );
            UsnUtility(const UsnUtility&);
            UsnUtility& operator = (const UsnUtility&);
            std::vector<std::map<uint64,FileInfo>*> files_;
        };
    }
}

#endif  // ANYTHING_SRC_USN_H_